;(() => {
  // class Point {
  //   x: number
  //   y: number
  //   constructor(x: number, y: number) {
  //     this.x = x
  //     this.y = y
  //   }
  //   getPosition() {
  //     return `(${this.x}-----(${this.y}))`
  //   }
  // }
  // const point = new Point(22, 33)
  // console.log(point)
  // console.log(point.getPosition())
  // class Parent {
  //   constructor(public name: string) {
  //     this.name = name
  //   }
  // }
  // class Child extends Parent {
  //   constructor(public name: string, public age: number) {
  //     super(name)
  //     this.age = age
  //   }
  // }
  // const child = new Child('胭脂', 90)
  // console.log(child)
  // public 公共
  // private 私有
  // class Parent {
  //   private age: number
  //   constructor(age: number) {
  //     this.age = age
  //   }
  //   getadd() {
  //     console.log(this.age)
  //   }
  // }
  // const parent = new Parent(19)
  // console.log(parent)
  // // console.log(parent.age); // 报错，私有属性
  // // console.log(Parent.age); // 报错，私有属性
  // // protected 受保护的
  // class Child extends Parent {
  //   constructor(age: number) {
  //     super(age)
  //   }
  //   getParentAdd() {
  //     super.getadd()
  //   }
  // }
  // const child = new Child(30)
  // child.getParentAdd()
  // console.log(child.getadd)
  // class Parent {
  //   private age: number
  //   constructor(age: number) {
  //     this.age = age
  //   }
  // }
  // const p = new Parent(19)
  // console.log(p)
  // // p.age报错  私有属性不能访问
  // class Child extends Parent {
  //   constructor(age: number) {
  //     super(age)
  //     // console.log(super.age);
  //   }
  // }
  // protected 受保护
  // class Parent {
  //   protected age: number
  //   protected constructor(age: number) {
  //     this.age = age
  //   }
  //   protected getAge() {
  //     return this.age
  //   }
  // }
  // const p = new Parent(19)
  // console.log(p)
  // p.getAge() 报错，受保护的属性只能在子类和父类中访问
  // p.age报错  私有属性不能访问
  // class Child extends Parent {
  //   constructor(age: number) {
  //     super(age)
  //     console.log(super.age)
  //     console.log(super.getAge)
  //   }
  // }
  // new Child(88)
  // class UserInfo {
  //   public readonly name: string
  //   constructor(name: string) {
  //     this.name = name
  //   }
  // }
  // const userInfo = new UserInfo('lison')
  // userInfo.name = '222' // 报错 只读属性不能被修改
  // class A {
  //   constructor(public name: string) {}
  // }
  // const a = new A('sss')
  // console.log(a)
  // class Parent {
  //   public static age: number = 18
  //   protected static getAge() {
  //     return Parent.age
  //   }
  //   constructor() {}
  // }
  // const p = new Parent()
  // // p.age 报错 不存在这个属性
  // console.log(Parent.age)
  // // console.log(Parent.getAge); // 报错， 受保护的类型
  // 可选类属性
  // class Info {
  //   public name: string
  //   public age?: number
  //   constructor(name: string, age?: number, public sex?: string) {
  //     this.name = name
  //     this.age = age
  //   }
  //   get infoStr() {
  //     return this.name
  //   }
  //   set infoStr(value) {
  //     this.name = value
  //   }
  // }
  // const info = new Info('胭脂', 123, '男')
  // console.log(info)
  // const info1 = new Info('刘柏麟')
  // console.log(info1)
  // info1.infoStr = '花花d'
  // console.log(info1.infoStr)
  // 抽象类
  // abstract class Person {
  //   constructor(public name: string) {}
  //   abstract getName(): void
  // }
  // // const person = new Person 报错 无法用抽象类创建实例
  // class Man extends Person {
  //   constructor(public name: string) {
  //     super(name)
  //   }
  //   getName() {
  //     console.log(this.name)
  //   }
  // }
  // const m = new Man('嘿嘿')
  // console.log(m)
  // m.getName()
  // class Person {
  //   constructor(public name: string) {}
  // }
  // const p = new Person('嘿嘿')
  // console.log(p)
  // abstract class People {
  //   abstract _name: string
  //   abstract get name(): string
  //   abstract set name(value: string)
  // }
  // class P extends People {
  //   public _name: string = '22'
  //   name: string = '50'
  //   // get name() {
  //   //   return this._name
  //   // }
  //   // set name(value: string) {
  //   //   this._name = value
  //   // }
  // }
  // class People {
  //   constructor(public name: string) {}
  // }
  // const p2: People = new People('你好')
  // class Animal {
  //   constructor(public name: string) {}
  // }
  // const a = new Animal('胭脂')
  // console.log(a instanceof Animal)
  // interface FoodInterface {
  //   type: string
  //   name: string
  // }
  // class Food implements FoodInterface {
  //   constructor(public type: string, public name: string) {}
  // }
  // // class F implements FoodInterface {
  // //   type: string = '2'
  // //  static name: string = '4'
  // // }
  // // 报错接口定义的是类的实例
  // const food = new Food('红色', '地蛋')
  // console.log(food)
  // class A {
  //   protected name!: string
  // }
  // interface I extends A {}
  // class B extends A implements I {
  //   public name!: string
  // }
  // const create = <T>(c: new () => T): T => {
  //   return new c()
  // }
  // class infos {
  //   public age!: number
  // }
  // console.log(create(infos))
})()
